node.jsのいろいろなモジュール14 – node-cronでcron的にプログラムを実行する
cronをnode.jsで実行
指定した日時や定期的に実行したいスクリプトがある場合、UNIX系OSの場合はcronを使用することが多いとおもいます。 cronとは、スクリプトを自動実行するためのデーモンプロセスで、crontabファイルに特定の書式で記述をすることにより、 指定した日時/定期日時にプログラムを実行することができます。 今回紹介するcronモジュールは、node.jsプログラム内で任意の処理をcrontabと同じ書式を使って記述することができます。 ではモジュールのインストールからサンプル作成をやってみましょう。
環境構築
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- Node.js : v0.8.15
- npm : 1.1.66
適当なディレクトリを作成し、そこでnpmを使用してインストールしましょう。
% mkdir cron % cd cron % npm install cron time % touch app.js //このファイルにサンプルプログラムを記述
cronモジュール使用時にタイムゾーンを指定したい場合等、timeモジュールが必要なので、いっしょにインストールしています。
node-cronサンプル
では早速サンプルプログラムを作成します。 cronの使い方はシンプルです。モジュールをロードしてCronJobをインスタンス化し、 start関数でcron開始、stop関数で終了します。
var cronJob = require('cron').CronJob; // 毎秒実行 var cronTime = "* * * * * *"; // 一度だけ実行したい場合、Dateオブジェクトで指定も可能 // var cronTime = new Date(); var job = new cronJob({ //実行したい日時 or crontab書式 cronTime: cronTime //指定時に実行したい関数 , onTick: function() { console.log('onTick!'); } //ジョブの完了または停止時に実行する関数 , onComplete: function() { console.log('onComplete!') } // コンストラクタを終する前にジョブを開始するかどうか , start: false //タイムゾーン , timeZone: "Japan/Tokyo" }) //ジョブ開始 job.start(); //ジョブ停止 //job.stop();
上記サンプルプログラムを実行すると、コンソールに文字列が1秒毎に表示されます。
まとめ
今回はnode.jsでcrontab書式が使えるnode-cronを紹介しました。 定期処理をするのに簡単に使えていいのではないしょうか。 ちなみに、このモジュールはOSが持っているcronとは関係ありません。
参考サイトなど
- node-cron(github): https://github.com/ncb000gt/node-cron
- node-time(github): https://github.com/TooTallNate/node-time